package offer.nowcoder.queue_stack;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.PriorityQueue;

/**
 * @author DengYuan2
 * @create 2021-02-16 21:07
 */
public class n_40 {
    public static void main(String[] args) {
        int[] a ={4,5,1,6,2,7,3,8};
        ArrayList<Integer> list = GetLeastNumbers_Solution(a, 4);
        System.out.println(list);
    }

    /**
     * 我的写法1-额，我是直接排序，虽然这样好像不太好
     * @param input
     * @param k
     * @return
     */
    public static ArrayList<Integer> GetLeastNumbers_Solution(int [] input, int k) {
        ArrayList<Integer> res = new ArrayList<>();
        if (input.length==0 || k>input.length){
            return res;
        }
        Arrays.sort(input);
        for (int i = 0; i < k; i++) {
            res.add(input[i]);
        }
        return res;
    }

    /**
     * 大神-使用priorityQueue
     * @param input
     * @param k
     * @return
     */
    public ArrayList<Integer> GetLeastNumbers_Solution2(int [] input, int k) {
        if (k<=0 || k>input.length){
            return new ArrayList<Integer>();
        }
//        PriorityQueue<Integer> queue = new PriorityQueue<>(new Comparator<Integer>() {
//            @Override
//            public int compare(Integer o1, Integer o2) {
//                return o2-o1;
//            }
//        });
        //直接lambda表达式
        PriorityQueue<Integer> queue = new PriorityQueue<>(((o1, o2) -> o2 - o1));
        for (int i = 0; i < input.length; i++) {
            queue.add(input[i]);
            if (queue.size()>k){
                queue.poll();
            }
        }
        return new ArrayList<>(queue);
    }
}
